package com.osdp.sc.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.osdp.sc.dto.PermissionDTO;
import com.osdp.sc.entity.ScPermission;
import com.osdp.sc.vo.ScPermissionVo;

import java.util.List;
import java.util.Optional;
import java.util.Set;

public interface IScPermissionService extends IService<ScPermission> {
    /**
     * permission复制，关联响应角色，用于租户数据初始化
     * @param tenantId
     * @param roleId
     */
//    public void permissionCopy(String tenantId, String roleId);
    /**
     * 查询所有(只过滤非删除)
     * @return List<ScPermission>
     */
    List<ScPermission> queryAllPermissionList();

    /**
     * 查询权限树
     * @param parentId 父ID
     * @return
     */
    List<ScPermissionVo> queryListByParentId(String parentId,String parentName);

    /**
     * 删除权限
     * @param id
     */
    boolean deleteScPermission(String id);

    /**
     * 新增权限
     * @param permissionVo
     */
    ScPermissionVo insertScPermission(ScPermissionVo permissionVo);

    /**
     * 修改权限
     * @param permissionVo
     */
    ScPermissionVo updateScPermission(ScPermissionVo permissionVo);


    /**
     * 获取权限列表
     * @param roleId
     * @return
     */
    List<ScPermissionVo> queryPermissionsByRoleId(String roleId);

    /**
     *
     * @param permissionList
     * @return
     */
    Set<ScPermissionVo> createPermissionTree(List<ScPermission> permissionList);


    /**
     * 根据用户ID 查询权限
     * @param userId String
     * @return List<ScPermission>
     */
    List<PermissionDTO> queryPermissionsByUserId(String userId);

    /**
     * 查询所有按钮资源
     * @return List<PermissionVo>
     */
    List<PermissionDTO> queryPermissionButtonByUserId(String userId);

    /**
    * 根据角色编码查询所有按钮与API资源
    * @param roleCodes Set<String>
    * @param tenantId String
    * @return Optional<List<PermissionDTO>>
    */
    Optional<List<PermissionDTO>> queryPermsButtonAndAPIByRoleCode(Set<String> roleCodes, String tenantId);
    /**
     * 查询API权限集合
     * @param userId String 用户ID
     * @return List<PermissionVo>
     */
    List<PermissionDTO> queryPermissionAPIByUserId(String userId);

    /**
     * 根据用户ID查询资源权限 code
     * @param userId String
     * @return
     */
    List<String> queryPermsCodeByUserId(String userId);

    /**
     * 判断访问权限
     * @param uri
     * @param method
     * @param authoritys
     * @return
     */
    boolean allow(String uri, String method, Set<String> authoritys);
}
